<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var arr = [1,2,3,[4,5,[7,8,[9,10]]]] // 假设不知道多维数组的层数，将多维数组通过递归转换成一维数组
        
        // result = [] // 参数的初始值，有数组数据就用数组数据，没有则定义一个空数组
        function flat(list, result = []){
            list.forEach(item => {
                if(Array.isArray(item)){
                   flat(item, result) // 判断儿子是不是数组，是数组的话递归遍历
                } else{
                    result.push(item) // 不是数组就进行push
                }
                
            });

            return result
        }
        
    //    console.log( flat(arr));



    const obj = {
        id: 1,
        name: "部门1",
        pid: 0,
        children: [
            {
                id: 2,
                name: "部门2",
                pid: 1,
                children: [],
            },
            {
                id: 6,
                name: "部门6",
                pid: 1,
                children: [],
            },
            {
                id: 3,
                name: "部门3",
                pid: 1,
                children: [
                    {
                        id: 4,
                        name: "部门4",
                        pid: 3,
                        children: [
                            {
                                id: 5,
                                name: "部门5",
                                pid: 4,
                                children: [],
                            },
                        ],
                    },
                ],
            },
        ],
    };
    // let result = []
    // function treeToList(tree, result = []){
    //     result.push(tree)
    //     tree.children.forEach((item => {
    //         // result.push(item)
    //         // item.children.forEach(a=>{
    //         //     result.push(a)
    //         // })
    //        treeToList(item, result) // 递归解决无限循环过程，递归的代码逻辑是类似的
    //     }))
    //     return result
    // }

    const arr1 = [
        { id: 1, name: "部门1", pid: 0 }, // 根节点
        { id: 2, name: "部门2", pid: 1 },
        { id: 3, name: "部门3", pid: 1 },
        { id: 4, name: "部门4", pid: 3 },
        { id: 5, name: "部门5", pid: 4 },
    ];
    // 列表转树形的函数
    function listToTree(list, pid){
        // rootValue // 传入需要匹配的pid
        let result = []
        list.forEach((item)=>{
            if(item.pid === pid){
                // item.children = listToTree(list, item.id)
                // list.forEach(a => {
                //     if(a.pid === item.id){
                //         children.push(a)
                //         let child = []
                //         list.forEach(b=>{
                //             if(b.pid === a.id){
                //                 child.push(b)
                //             }
                //             a.children = child
                //         })
                //         item.children = children
                //     }
                // })
                // 以item.id 作为pid的就是item的孩子
                item.children = listToTree(list, item.id) // 找到 pid === item.id的children
                // 找完儿子把自己push到结果
                result.push(item)
            } 

        })
        return result
    }

    console.log(listToTree(arr1, 0));
    </script>
</body>
</html>